/**
 *  Latest information on this project can be found at http://www.rogue-development.com/pulseParticles.xml
 * 
 *  Copyright (c) 2008 Marc Hughes 
 * 
 *  Permission is hereby granted, free of charge, to any person obtaining a 
 *  copy of this software and associated documentation files (the "Software"), 
 *  to deal in the Software without restriction, including without limitation 
 *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
 *  and/or sell copies of the Software, and to permit persons to whom the Software 
 *  is furnished to do so, subject to the following conditions:
 * 
 *  The above copyright notice and this permission notice shall be included in all 
 *  copies or substantial portions of the Software.
 * 
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
 *  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
 *  PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
 *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
 *  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
 * 
 * -------------------------------------------------------------------------------------------
 * 
 * Description:
 *    The Pulse Particle engine gives a simple way to create complex particle effects.
 * 
 * 
 * 
 **/
 

 /**
 * This rule causes motion to stop once a particle enters a defined area.
 * 
 * Often times this is used to cause a particle to "stop when it hits the floor".
 *   
 **/
package com.roguedevelopment.pulse.rule
{	
	import com.roguedevelopment.pulse.particle.IParticle;
	
	import flash.geom.Rectangle;

	public final class MovementStopRule implements IPulseRule
	{
		protected var box:Rectangle;
		
		public function MovementStopRule(box:Rectangle = null)
		{
			super();
			
			this.box = box;
			
		}

		public function configure( params:Array ) : void
		{
			if( params.length != 4 ) { return; }
			box = new Rectangle(params[0],params[1],params[2],params[3]);			
		}
		public function applyRule(pulse:IParticle, currentMs:Number, lastMs:Number):void
		{
			if( box.contains( pulse.x, pulse.y ) )
			{
				for each ( var rule:IPulseRule in pulse.rules )
				{
					if( rule is MovementRule) 
					{						
						var i:int = pulse.rules.lastIndexOf( rule )						
						pulse.rules.splice(i,1);						
					}					
				}
				pulse.params.speed = 0;				
			}
		}
		
	}
}
